今天要來學寫程式囉,今天就只講資料型態的部分,想要一天學完全部,我怕你的腦子會爆炸,畢竟在學校的話,這是一學期的課程。我們慢慢來就好,30 天之內一定會讓你學會寫聊天機器人的。
平常我們寫程式是寫在文字檔,然後再拿程式碼檔去一行行的執行程式。但當我們想要測試某一行程式碼的結果時,我們會使用 irb(Interactive Ruby) 來做測試。irb 很方便,我們可以在 irb 的環境裡面輸入一行程式碼,就能馬上得到這行程式碼的結果。
先按 Windows
+R
輸入 cmd
叫出小黑框:
D:\只要有心,人人都可以作卡米狗>
輸入 irb
。
D:\只要有心,人人都可以作卡米狗>irb
irb(main):001:0>
輸入完之後就會進入 irb 的世界,在左側看到 irb 開頭就代表現在在 irb 裡面。
要離開 irb 的話就輸入 exit
或者按 Ctrl
+C
。
D:\只要有心,人人都可以作卡米狗>irb
irb(main):001:0> exit
D:\只要有心,人人都可以作卡米狗>
就像這樣,就離開了 irb 的環境。
再次進到 irb ,我們先認識一下資料型態:
數字就是我們一般理解的數字,數學課教的那種。
輸入 5566:
D:\只要有心,人人都可以作卡米狗>irb
irb(main):001:0> 5566
=> 5566
輸入 5566
之後看到 => 5566
代表 5566
這行程式碼的執行結果是 5566
。
接下來輸入 5566+9527
看看:
irb(main):002:0> 5566+9527
=> 15093
輸入 5566+9527
之後看到 => 15093
代表 5566+9527
這行程式碼的執行結果是 15093
。
輸入 5566.class
可以讓 ruby 告訴我們,5566 是什麼型態:
irb(main):003:0> 5566.class
=> Integer
5566 是 Integer(整數)。
輸入 '5566'.class
看看:
irb(main):004:0> '5566'.class
=> String
用單引號或雙引號包起來的東西是字串,字串就是文字的意思。
輸入 '5566+9527'
看看:
irb(main):005:0> '5566+9527'
=> "5566+9527"
因為加號也是文字的一部分,所以就不會做計算。
讓我們試著把兩個字串加起來看看,輸入'5566'+'9527'
:
irb(main):006:0> '5566'+'9527'
=> "55669527"
就像是在 5566 後面輸入 9527 一樣。
在 windows 的 irb 可能會遇到不能輸入中文的情形,目前請先別介意,我們用英文就好。
我們可以使用等號來幫數字或文字取名字。
irb(main):007:0> idol = 5566
=> 5566
變數定義完之後,我們只要叫到他,就視同輸入等號右邊的結果。
irb(main):008:0> idol
=> 5566
事實上我們可以取名字的東西非常多,不是只有數字和文字能被取名。
我們可以一次宣告大量變數,語法是中括號 [] 的中間用逗號區隔。
irb(main):009:0> eat = ["Mcdonald's", 'KFC', 'BUG King', 'MOS BUG']
=> ["Mcdonald's", "KFC", "BUG King", "MOS BUG"]
我們這樣就宣告了4個字串變數,分別是:
在電腦的世界裡第一個數字是 0,所以宣告一堆變數之後,第一個變數的索引是 0。
你也可以這樣寫,效果是相同的:
irb(main):010:0> eat = []
=> []
irb(main):011:0> eat[0] = "Mcdonald's"
=> "Mcdonald's"
irb(main):012:0> eat[1] = 'KFC'
=> "KFC"
irb(main):013:0> eat[2] = 'BUG King'
=> "BUG King"
irb(main):014:0> eat[3] = 'MOS BUG'
=> "MOS BUG"
irb(main):015:0> eat
=> ["Mcdonald's", "KFC", "BUG King", "MOS BUG"]
第一行是宣告一個空陣列,然後接下來的每一行都是塞入一個值。
你也可以這樣寫,效果也是相同的:
irb(main):016:0> eat = []
=> []
irb(main):017:0> eat << "Mcdonald's"
=> ["Mcdonald's"]
irb(main):018:0> eat << 'KFC'
=> ["Mcdonald's", "KFC"]
irb(main):019:0> eat << 'BUG King'
=> ["Mcdonald's", "KFC", "BUG King"]
irb(main):020:0> eat << 'MOS BUG'
=> ["Mcdonald's", "KFC", "BUG King", "MOS BUG"]
<<
表示放一個東西進入陣列。
查看 eat
的資料型態會發現資料型態是 Array(陣列)。
irb(main):021:0> eat.class
=> Array
查看 eat[0]
的資料型態會發現資料型態是 String(字串)。
irb(main):022:0> eat[0].class
=> String
跟一般的變數一樣,輸入 eat[2]
可以取得他的內容。
irb(main):023:0> eat[2]
=> "BUG King"
但是你還可以這樣:
irb(main):024:0> bgk = 2
=> 2
irb(main):025:0> eat[bgk]
=> "BUG King"
也許現在還很難理解把 2
換成 bgk
會有什麼好處,本篇結尾會說明。
在陣列中,我們學到可以用數字作為索引,而雜湊陣列則是把數字改成任何資料型態的變數。
雜湊陣列(Hash)是使用大括號作為定義:
irb(main):026:0> eat_hash = {}
=> {}
irb(main):027:0> eat_hash[0] = "Mcdonald's"
=> "Mcdonald's"
irb(main):028:0> eat_hash[1] = "KFC"
=> "KFC"
irb(main):029:0> eat_hash[2] = "BUG King"
=> "BUG King"
irb(main):030:0> eat_hash[3] = "MOS BUG"
=> "MOS BUG"
irb(main):031:0> eat_hash
=> {0=>"Mcdonald's", 1=>"KFC", 2=>"BUG King", 3=>"MOS BUG"}
你也可以這樣寫:
irb(main):032:0> eat_hash = {0=>"Mcdonald's", 1=>"KFC", 2=>"BUG King", 3=>"MOS BUG"}
=> {0=>"Mcdonald's", 1=>"KFC", 2=>"BUG King", 3=>"MOS BUG"}
和陣列不同的是,雜湊陣列不需要從 0 開始。
而且雜湊陣列的特性是可以用不是數字的變數作為索引,其中最常用的索引是字串索引,舉例來說:
irb(main):033:0> kamigo = {}
=> {}
irb(main):034:0> kamigo['Q'] = 'A'
=> "A"
而這就是卡米狗學說話的核心原理。
卡米狗有一個很大的雜湊陣列,當有人教卡米狗說話時,我就會將關鍵字和要回應的內容儲存到雜湊陣列裡,像這樣:
kamigo[關鍵字] = 要回應的內容
之後任何人說話,我就會去檢查 kamigo[關鍵字]
是不是有值,如果有值的話卡米狗就會做出回應。
講到這,應該就知道為什麼索引可以用變數代換是一件很重要的事情了吧?